/**
 * Vite 生产环境配置
 * 专门针对生产环境的优化配置
 */

import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [
    vue({
      template: {
        compilerOptions: {
          // 生产环境移除开发时的注释
          comments: false
        }
      }
    })
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    },
  },
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@use "@/styles/variables.scss" as *;`
      }
    }
  },
  build: {
    target: 'es2020',
    minify: 'terser',
    terserOptions: {
      compress: {
        // 移除 console 和 debugger
        drop_console: true,
        drop_debugger: true,
        pure_funcs: ['console.log', 'console.info', 'console.debug', 'console.warn'],
        // 移除未使用的代码
        dead_code: true,
        // 优化条件表达式
        conditionals: true,
        // 优化比较操作
        comparisons: true,
        // 内联函数
        inline: 2,
        // 移除未使用的变量
        unused: true
      },
      mangle: {
        // 混淆变量名
        toplevel: true,
        safari10: true
      },
      format: {
        // 移除注释
        comments: false
      }
    },
    rollupOptions: {
      output: {
        // 优化代码分割
        manualChunks: {
          // Vue 核心库
          'vue-core': ['vue'],
          'vue-router': ['vue-router'],
          'vue-store': ['pinia'],
          
          // 游戏引擎核心
          'game-engine': [
            './src/game/GameEngine',
            './src/game/EntityManager',
            './src/game/CollisionDetector',
            './src/game/GameLoop'
          ],
          
          // 游戏实体
          'game-entities': [
            './src/game/Player',
            './src/game/Character',
            './src/game/Obstacle',
            './src/game/PowerUp'
          ],
          
          // 游戏系统
          'game-systems': [
            './src/game/AudioManager',
            './src/game/LevelGenerator',
            './src/game/ParticleSystem',
            './src/game/Animation'
          ],
          
          // 错误处理
          'error-handlers': [
            './src/game/GameErrorHandler',
            './src/game/AudioErrorHandler',
            './src/game/RenderErrorHandler',
            './src/game/StorageErrorHandler'
          ],
          
          // 工具函数
          'utils': [
            './src/utils/performanceMonitor',
            './src/utils/browserCompatibility',
            './src/utils/polyfills'
          ]
        },
        
        // 资源文件命名策略
        assetFileNames: (assetInfo) => {
          const info = assetInfo.name?.split('.') || []
          const ext = info[info.length - 1]
          
          // 图片资源
          if (/\.(png|jpe?g|gif|svg|webp|avif)$/i.test(assetInfo.name || '')) {
            return `assets/img/[name].[hash:8][extname]`
          }
          
          // 字体资源
          if (/\.(woff2?|eot|ttf|otf)$/i.test(assetInfo.name || '')) {
            return `assets/fonts/[name].[hash:8][extname]`
          }
          
          // 音频资源
          if (/\.(mp3|wav|ogg|m4a|aac)$/i.test(assetInfo.name || '')) {
            return `assets/audio/[name].[hash:8][extname]`
          }
          
          // CSS 文件
          if (ext === 'css') {
            return `assets/css/[name].[hash:8][extname]`
          }
          
          return `assets/[name].[hash:8][extname]`
        },
        
        // JS 文件命名
        chunkFileNames: 'assets/js/[name].[hash:8].js',
        entryFileNames: 'assets/js/[name].[hash:8].js'
      },
      
      // 外部依赖优化
      external: [],
      
      // 输入优化
      treeshake: {
        moduleSideEffects: false,
        propertyReadSideEffects: false,
        unknownGlobalSideEffects: false
      }
    },
    
    // 构建优化
    reportCompressedSize: true,
    chunkSizeWarningLimit: 800,
    assetsInlineLimit: 4096, // 4KB以下的资源内联
    
    // 源码映射（生产环境关闭以减小体积）
    sourcemap: false,
    
    // CSS 代码分割
    cssCodeSplit: true,
    
    // 预加载模块
    modulePreload: {
      polyfill: true
    }
  },
  
  // 依赖优化
  optimizeDeps: {
    include: ['vue', 'vue-router', 'pinia'],
    exclude: []
  },
  
  // 实验性功能
  experimental: {
    renderBuiltUrl: (filename: string) => {
      // 可以自定义资源URL生成逻辑
      return filename
    }
  }
})